use std::io::Error;

use log::{debug, info, warn};

use tokio::runtime::Runtime;

use crate::config::init_config;

fn main() {
    // init
    init();

    println!("Hello, world!");

}

static mut TOKIO_RUNTIME: Option<Box<Runtime>> = None;

pub fn init_tokio() {
    unsafe {
        if TOKIO_RUNTIME.is_some() {
            return;
        }
        TOKIO_RUNTIME = Some(Box::new(Runtime::new().unwrap()));
    }
}

#[inline]
pub fn get_tokio_runtime() -> &'static Runtime {
    unsafe {
        TOKIO_RUNTIME.as_ref().unwrap()
    }
}

pub fn init() {
    // init 日志
    // 使用 log4rs::init_file 方法读取配置文件进行初始化
    log4rs::init_file("log4rs.yaml", Default::default()).unwrap();

    init_config();

    init_tokio();
}